package cn.ac.jaas.isc.vegetable.pbms.service.impl;

import cn.ac.jaas.isc.vegetable.common.core.util.R;
import cn.ac.jaas.isc.vegetable.common.security.service.VegetableUser;
import cn.ac.jaas.isc.vegetable.common.security.util.SecurityUtils;
import cn.ac.jaas.isc.vegetable.pbms.api.entity.ArcHouse;
import cn.ac.jaas.isc.vegetable.pbms.api.entity.ArcHouseType;
import cn.ac.jaas.isc.vegetable.pbms.api.vo.HouseTypeVO;
import cn.ac.jaas.isc.vegetable.pbms.mapper.ArcHouseMapper;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import cn.ac.jaas.isc.vegetable.pbms.mapper.ArcHouseTypeMapper;
import cn.ac.jaas.isc.vegetable.pbms.service.ArcHouseTypeService;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 温室类型表
 *
 * @author 张高昌
 * @date 2022-05-01 17:45:20
 */
@Service
@AllArgsConstructor
public class ArcHouseTypeServiceImpl extends ServiceImpl<ArcHouseTypeMapper, ArcHouseType> implements ArcHouseTypeService {

    private final ArcHouseMapper arcHouseMapper;

    @Transactional(rollbackFor = Exception.class)
    @Override
    public R saveHouseType(ArcHouseType arcHouseType) {
        LambdaQueryWrapper<ArcHouseType> wrapper = Wrappers.lambdaQuery();
        wrapper.eq(ArcHouseType::getHouseType, arcHouseType.getHouseType());
        List<ArcHouseType> model = baseMapper.selectList(wrapper);
        if (CollUtil.isNotEmpty(model)) {
            return R.failed("温室类型编码已存在");
        }
        VegetableUser user = SecurityUtils.getUser();
        arcHouseType.setCreateTime(LocalDateTime.now());
        arcHouseType.setCreateUser(user.getId());
        baseMapper.insert(arcHouseType);
        return R.ok(true);
    }

    @Transactional(rollbackFor = Exception.class)
    @Override
    public R updateHouseTypeById(ArcHouseType arcHouseType) {
        LambdaQueryWrapper<ArcHouseType> wrapper = Wrappers.lambdaQuery();
        wrapper.eq(ArcHouseType::getHouseType, arcHouseType.getHouseType())
                .ne(ArcHouseType::getHouseTypeId, arcHouseType.getHouseTypeId());
        List<ArcHouseType> model = baseMapper.selectList(wrapper);
        if (CollUtil.isNotEmpty(model)) {
            return R.failed("温室类型编码已存在");
        }
        VegetableUser user = SecurityUtils.getUser();
        arcHouseType.setUpdateTime(LocalDateTime.now());
        arcHouseType.setUpdateUser(user.getId());
        baseMapper.updateById(arcHouseType);
        return R.ok(true);
    }

    @Override
    public List<HouseTypeVO> getAllHouseType() {
        return baseMapper.selectAll();
    }

    @Transactional(rollbackFor = Exception.class)
    @Override
    public R removeHouseType(Integer houseTypeId) {
        ArcHouseType arcHouseType = baseMapper.selectById(houseTypeId);

        List<ArcHouse> arcHouses = arcHouseMapper.selectList(Wrappers.<ArcHouse>query().lambda().eq(ArcHouse::getHouseType, arcHouseType.getHouseType()));
        if (CollUtil.isNotEmpty(arcHouses)) {
            return R.failed("温室类型已被使用，无法删除！");
        }
        baseMapper.deleteById(houseTypeId);

        return R.ok(true);
    }
}
